import java.io.*;
import java.net.*;

public class Requisicao extends Thread {
	private Socket socket = null;
	private Mensagem msg = null;
	private String mestre = null;
	
	private final String filePath = "/opt/grupo02/";
	
	public Requisicao(Socket socket, String mestre) {
		this.socket = socket;
		this.mestre = mestre;
		try {
			msg = new Mensagem(socket);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public void run()
	{
		String str = null;
		
		try {
			str = msg.recebe();
		} catch (Exception e) {
			e.printStackTrace();
			str = null;
		}
		
		String[] partes = str.split("/");
		File arquivo = new File(filePath + partes[1]);
		
		try {
			switch (partes[0]) {
				case "add":
					System.out.println("Criando arquivo...");
					if (arquivo.createNewFile())
						msg.envia("sucesso");
					else
						msg.envia("erro");
					break;
				case "read":
					System.out.println("Enviando arquivo...");
					msg.enviaArquivo(partes[1]);
					msg.envia("sucesso");
					break;
				case "del":
					System.out.println("Apagando arquivo...");
					if (arquivo.delete())
						msg.envia("sucesso");
					else
						msg.envia("erro");
					break;
				case "move":
					System.out.println("Recebendo arquivo...");
					msg.recebeArquivo();
					System.out.println("Recebido.");
					msg.envia("sucesso");
					break;
				case "update":
					System.out.println("Atualizando arquivo...");
					P2P noMestre = new P2P(P2P.porta);
					noMestre.abreConexao(this.mestre);
					noMestre.abreStreams();
					noMestre.envia("read/" + partes[1] + "/" + InetAddress.getLocalHost().getHostName());
					noMestre.recebe();
					
					System.out.println("Permitido.");
					P2P outroNo = new P2P(P2P.porta);
					outroNo.abreConexao(partes[2]);
					outroNo.abreStreams();
					outroNo.envia("read/" + partes[1]);
					outroNo.recebeArquivo();
					outroNo.recebe();
					outroNo.fechaConexao();
					outroNo = null;
					
					noMestre.envia("cabei");
					noMestre.fechaConexao();
					noMestre = null;
					System.out.println("Atualizado.");
					break;
			}
		}
		catch (Exception e) {
			e.printStackTrace();
		}
	}
}
